package 力扣._00周赛._429周赛.问题2;

import java.util.*;

class Solution2 {
    public int maxDistinctElements(int[] nums, int k) {
        Arrays.sort(nums); // 排序数组
        int n = nums.length;
        int[] adjusted = new int[n]; // 用于存储调整后的值
        int leftLimit = Integer.MIN_VALUE; // 左边界的限制
        int rightLimit = Integer.MAX_VALUE; // 右边界的限制

        for (int i = 0, j = n - 1; i <= j; i++, j--) {
            // 处理左指针元素
            if (i == 0) {
                adjusted[i] = nums[i] - k; // 左侧初始值尽量减小
            } else {
                adjusted[i] = Math.max(leftLimit + 1, nums[i] - k); // 确保大于上一个左边值
                if(adjusted[i] > nums[i]+k||adjusted[i]<nums[i]-k){
                    adjusted[i] = nums[i]+k;
                }
            }
            leftLimit = adjusted[i]; // 更新左边界

            // 处理右指针元素
            if (j == n - 1) {
                adjusted[j] = nums[j] + k; // 右侧初始值尽量增大
            } else {
                adjusted[j] = Math.min(rightLimit - 1, nums[j] + k); // 确保小于上一个右边值
                if(adjusted[j] > nums[j]+k||adjusted[j]<nums[j]-k){
                    adjusted[j] = nums[j]-k;
                }
            }
            rightLimit = adjusted[j]; // 更新右边界

//            // 如果双指针相遇
//            if (i == j) {
//                int l = Math.max(leftLimit + 1, nums[i] - k);
//                int r = Math.min(rightLimit - 1, nums[j] + k);
//                if (l <= r) {
//                    adjusted[i] = l;
//                }else{
//                    adjusted[i] = l;
//                }
//            }
        }
        System.out.println(Arrays.toString(adjusted));
        Arrays.sort(adjusted);
        int count = 1;
        for(int i=1;i<n;i++){
            if(adjusted[i]!=adjusted[i-1]){
                count++;
            }
        }


        return count;


    }

    public static void main(String[] args) {
        Solution2 s = new Solution2();
//        int[] nums = new int[100000];
//        int k = 1000000000;
        int[] nums = {56,56,54,54};
        int k = 0;
        System.out.println(s.maxDistinctElements(nums, k));
    }
}